package com.whfc.wxmp.api.emp.service;

import com.whfc.common.result.ListData;

import com.whfc.common.result.PageVO;
import com.whfc.emp.param.AppEmpAddParam;
import com.whfc.emp.param.AppEmpDeviceBindParam;
import com.whfc.emp.param.AppEmpEditParam;
import com.whfc.emp.dto.*;
import com.whfc.entity.dto.WxDeviceBindCheckDTO;
import com.whfc.fuum.entity.WxUser;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Date;
import java.util.List;

/**
 * @Description: 人员接口
 * @author: xugcheng
 * @version: 1.0
 * @date: 2019/8/27 9:07
 */
public interface WxEmpService {


    /**
     * 小程序中的人员列表(不分页)
     *
     * @param deptId
     * @param keyword
     * @return
     */
    ListData<WxEmpGroupDTO> getEmpList(Integer deptId, String keyword);

    List<AppEmpDTO> getLeaderList(Integer deptId, String keyword);

    /**
     * 查询地图页人员列表
     *
     * @param deptId
     * @return
     */
    WxMapEmpDTO getMapList(Integer deptId);


    /**
     * 获取筛选人员工种列表
     *
     * @param deptId
     * @return
     */
    ListData<AppWorkTypeDTO> workTypeList(Integer deptId);

    /**
     * 查询人员信息
     *
     * @param wxUser
     * @param empId
     * @return
     */
    AppEmpDTO getEmpInfo(WxUser wxUser, Integer empId);

    /**
     * 编辑人员信息
     *
     * @param wxUser
     * @param request
     */
    void editEmpInfo(WxUser wxUser, AppEmpEditParam request);

    /**
     * 删除人员信息
     *
     * @param empId
     */
    void delEmp(Integer empId);

    /**
     * 已存在人员绑定硬件
     *
     * @param user
     * @param request
     */
    void bindDevice(WxUser user, AppEmpDeviceBindParam request);

    /**
     * 人员解绑硬件
     *
     * @param user
     * @param empId
     */
    void unbindDevice(WxUser user, Integer empId);

    /**
     * 新增人员并绑定硬件
     *
     * @param wxUser
     * @param request
     */
    void bindEmp(WxUser wxUser, DeviceBindEmp request);


    /**
     * 硬件绑定前检验
     *
     * @param sn
     * @return
     */
    WxDeviceBindCheckDTO bindCheck(String sn);

    /**
     * 查询人员工时数据
     *
     * @param wxUser
     * @param empId
     * @param date
     * @return
     */
    WxEmpWorkHourDTO getEmpWorkHour(WxUser wxUser, Integer empId, Date date);

    /**
     * 查询人员轨迹
     *
     * @param empId
     * @param date
     * @return
     */
    ListData<AppEmpGpsDTO> gpsLog(Integer empId, Date date);

    /**
     * 查询人员当前位置
     *
     * @param empId
     * @return
     */
    AppEmpGpsDTO getLatestGps(Integer empId);

    /**
     * 获取微信人员数据中心
     *
     * @param deptId     组织机构ID
     * @return 人员数据中心
     */
    WxEmpDataCenterDTO getEmpDataCenter(Integer deptId);

    /**
     * 获取地图人员 合作单位-班组-人员
     * @param deptId
     * @return
     */
    WxMapEmpDTO getMapListNew(Integer deptId, List<Integer> groupIds, List<Integer> corpIds,String name);


    /**
     * 查询人员轨迹
     *
     * @param empId
     * @param date
     * @return
     */
    PageVO<AppEmpGpsDTO> gpsLogPage(Integer empId, Date date, Integer pageNum, Integer pageSize);


    /**
     * 小程序中的人员列表(不分页)
     *
     * @param deptId
     * @param keyword
     * @return
     */
    List<AppCorpGroupDTO> getEmpListV2(Integer deptId, String keyword);

    /**
     * 人员管理-上传图片
     *
     * @param base64Str
     * @param file
     * @param faceFlag
     * @return
     * @throws IOException
     */
    String uploadImg(String base64Str, MultipartFile file, Boolean faceFlag) throws IOException;


    /**
     * 人员管理-添加人员
     *
     * @param request
     */
    void add(AppEmpAddParam request);

    List<AppEmpDTO> getEmpListByPhone(String phone);

}
